VPC Reachability Analyzer で EC2 が NAT Gateway 経由でインターネットに出られるか調べてみた
ちゃだいん(@chazuke4649)です。
先日の re:Invent 2020で VPC Reachability Analyzer が発表されました。
一言で言うと、VPC内のリソース間の接続性をテスト出来るVPCの新機能ですが、現時点で以下のような送信元(送信先)タイプとしては以下が選べます。
- Transit Gateways
- VPN Gateways
- Instances
- Network Interfaces
- Internet Gateways
- VPC Endpoints
- VPC Connections
「あ、Internet Gatewayがある。ならVPC間の通信以外に、インターネットへのアウトバウンド通信もテストできそうだ」
というワケで、ありがちな「プライベートサブネットのEC2がNAT経由でインターネットに出られない問題」をこのツールを使って調査してみました。
VPC Reachability Analyzer については、以下エントリをご参考ください。
構成図
2つのパブリックサブネットにNAT Gatewayを配置し、プライベートサブネットにEC2を配置しているとてもシンプルな構成で行います。
1.成功した場合
まずは、うまくいった場合どうなるのかをみてみたいと思います。
VPCコンソールからVPC Reachability Analyzerを開き、送信元と送信先を入力するだけでOKです。とても簡単。
送信元には、プライベートサブネットにいるEC2インスタンス、送信先には、EC2インスタンスがいるVPCのインターネットゲートウェイを指定しました。
上記作成後しばらくすると解析が終わり、下図のように「到達可能」であることがわかります。
下図のように、詳細な経路がわかるのがVPC Reachability Analyzerのめちゃ良い点ですね。
うまくいけばこのようになります。
2.失敗した場合(ルートテーブル)
今回の構成の場合、NAT Gateway を作成した後に、EC2のいるプライベートサブネットのルートテーブルに 送信先:0.0.0.0/0 ターゲット:nat-xxxxxxxx
といったルートが必要です。これがない場合どうなるかみてみます。先ほど成功した構成から対象のルートを削除し、もう一度分析を実行しました。
すると、下図のように「到達不可能」という結果が出ました。
3つ原因と思われる点が説明されています。今回の場合は「ルートテーブル rtb-xxxxxxxx には igw-xxxxxxxx への適切なルートがありません。rtb-xxxxxx を参照してください。」があり、ルートテーブルが怪しいと指摘してくれます。文中にあるハイパーリンクで飛ぶと下図の通り対象のルートテーブルをすぐに確認できて便利です。
3.失敗した場合(セキュリティグループ)
2.で原因とされたルートテーブルを修正し成功を確認した後、次はセキュリティグループをみてみます。試しに、EC2のセキュリティグループのアウトバウンドを HTTPS(443)のみ 0.0.0.0/0 への通信
を許可する状態に変更してみます。
そして、VPC Reachability Analyzer 側では下図の通り、先ほどと同様の送信元・送信先に追加で 送信ポート HTTP(80)
で設定し、分析してみました。
分析結果としてはやはり「到達不可能」となり、「次のセキュリティグループの egress ルールはいずれも適用されません: sg-xxxxxxxxxxx」と指摘されました。
文中のハイパーリンクから対象のセキュリティグループを確認すると、アウトバウンドルールを確認できます。
終わりに
プライベートなEC2からNAT経由でインターネット到達性を試しました。ありがたいこの機能、フル活用してVPCネットワークのトラブルシュートを減らしていきたいものです。
それではこの辺で。ちゃだいん(@chazuke4649)でした。
参考資料
What is VPC Reachability Analyzer? - Amazon Virtual Private Cloud